<?php


require_once("CuParse.class.php");


class Herramientas {

    function Herramientas() {
        
    }

    public static function registrosCSV($csv){
        $cvs = new CSVparse();
        $registros=$cvs->buildStock($csv);
        return $registros;

    }
    /* Esta función retorna la columna que se encuentre en el arreglo, segun la busqueda que reciba
     * @param $array arreglo que recibimos
     * @param $valor_retornar corresponde a la columna que queremos que retorne
     * @param $busqueda palabras o valores a encontrar en el arreglo
     * @return valores encontrados
     * 
     */
    public static function getXYbuscar_arreglo($array, $valor_retornar, $busqueda) {
        $result = array();
        foreach ($array as $key => $value) {
            $posicion = array_search($busqueda, $value);
            if ($posicion) {
                $result[] = $value[$valor_retornar];
            }
        }
        return $result;
    }

    public static function GetPost($variable) {
        if ($_POST[$variable] != "") {
            return trim($_POST[$variable]);
        } elseif ($_GET[$variable] != "") {
            return trim($_GET[$variable]);
        }else
            return "";
    }

    function cuadros($posx, $posy, $ancho, $alto, $cantidadh, $cantidadv, $estilo) {
        /*         * **************************************** */
        /*         * **ESTA FUNCION ES PARA PINTAR CUADROS*** */
        /*         * **************************************** */
        for ($x = 0; $x < $cantidadh; $x++) {
            for ($y = 0; $y < $cantidadv; $y++) {
                $forx = $posx + ($x * $ancho);
                $fory = $posy + ($y * $alto);
                $this->Rect($forx, $fory, $ancho, $alto, $estilo);
            }
        }
    }

    public static function PrintR($obj) {
        print '<pre>';
        print_r($obj);
        print '</pre>';
    }

    /**
     * Verifica que una fecha esté dentro del rango de fechas establecidas
     * @param $start_date fecha de inicio
     * @param $end_date fecha final
     * @param $evaluame fecha a comparar
     * @return true si esta en el rango, false si no lo está
     */
    public static function check_in_range($start_date, $end_date, $evaluame) {
        $start_ts = strtotime($start_date);
        $end_ts = strtotime($end_date);
        $user_ts = strtotime($evaluame);
        return (($user_ts >= $start_ts) && ($user_ts <= $end_ts));
    }

    public static function chequearIngreso($start_date, $end_date, $ingreso) {
        if (self::check_in_range($start_date, $end_date, $ingreso)) {
            return true;
        } else {
            return false;
        }
    }

    public static function chequearEgreso($start_date, $end_date, $egreso) {
        if (self::check_in_range($start_date, $end_date, $egreso)) {
            return true;
        } else {
            return false;
        }
    }

    public static function instr($palabra, $busqueda, $comienzo, $concurrencia) {
        $tamano = strlen($palabra);
        $cont = 0;
        $cont_conc = 0;

        for ($i = $comienzo; $i <= $tamano; $i++) {
            $cont = $cont + 1;
            if ($palabra[$i] == $busqueda):
                $cont_conc = $cont_conc + 1;

                if ($cont_conc == $concurrencia):
                    $i = $tamano;
                endif;
            endif;
        }
        if ($concurrencia > $cont_conc):
            $cont = 0;
        else:
            $cont;
        endif;

        return $instr = $cont;
    }

    public static function isFloat($value) {
        $expresionfloat = "/^(\d{1,3}\,)(\d{3,3}\,){1,10}(\.\d+)$/";
        $expresionfloat_1 = "/^(\d{1,10})(\.\d+)$/";
        $expresionfloat_2 = "/^(\d{1,3}\,){1,10}(\d{3,3})(\.\d+)$/";
        $expresionfloat_3 = "/^(\d{1,20})$/";
        $expresionfloat_4 = "/^(\d{1,20})(\.\d+)$/";

        if (preg_match($expresionfloat, $value) || preg_match($expresionfloat_1, $value) || preg_match($expresionfloat_2, $value) || preg_match($expresionfloat_3, $value) || preg_match($expresionfloat_4, $value))
            return true;
        else
            return false;
    }

    public static function isFloatVE($value) {
        $expresionfloatVE = "/^(\d{1,3}\.)(\d{3,3}\.){1,10}(\,\d+)$/";
        $expresionfloatVE_1 = "/^(\d{1,10})(\.\d+)$/";
        $expresionfloatVE_2 = "/^(\d{1,3}\.){1,10}(\d{3,3})(\,\d+)$/";
        $expresionfloatVE_3 = "/^(\d{1,20})$/";
        $expresionfloatVE_4 = "/^(\d{1,20})(\,\d+)$/";

        if (preg_match($expresionfloatVE, $value) || preg_match($expresionfloatVE_1, $value) || preg_match($expresionfloatVE_2, $value) || preg_match($expresionfloatVE_3, $value) || preg_match($expresionfloatVE_4, $value))
            return true;
        else
            return false;
    }

    public static function convertArrayKeysToUtf8(array $array) {
        $convertedArray = array();
        foreach ($array as $key => $value) {
            if (!mb_check_encoding($key, 'UTF-8'))
                $key = utf8_encode($key);
            if (is_array($value))
                $value = self::convertArrayKeysToUtf8($value);

            $convertedArray[$key] = $value;
        }
        return $convertedArray;
    }

    /**
     * Encodes an ISO-8859-1 mixed variable to UTF-8 (PHP 4, PHP 5 compat)
     * @param    mixed    $input An array, associative or simple
     * @param    boolean  $encode_keys optional
     * @return    mixed     ( utf-8 encoded $input)
     */
    public static function utf8_encode_mix($input, $encode_keys=false) {
        if (is_array($input)) {
            $result = array();
            foreach ($input as $k => $v) {
                $key = ($encode_keys) ? utf8_encode($k) : $k;
                $result[$key] = self::utf8_encode_mix($v, $encode_keys);
            }
        } else {
            $result = utf8_encode($input);
        }

        return $result;
    }

    public static function FloatVEtoFloat($value) {
        try {
            $sinpuntos = str_replace('.', '', $value);
            $valor_en_float = (float) str_replace(',', '.', $sinpuntos);
            if (is_nan($valor_en_float))
                return 0.00;
            else
                return $valor_en_float;
        } catch (Exception $e) {
            return 0.00;
        }
    }

    public static function toFloat($value) {
        $valorfloat = 0.0;
        if (($value == " ") || ($value == "") || ($value == "NaN")) {
            $valorfloat = 0.00;
        } else {
            if (Herramientas::isFloat($value) || is_float($value)) {
                $value = str_replace(',', '', $value);
                $valorfloat = (float) $value;
            } else {

                if (Herramientas::isFloatVE($value))
                    $valorfloat = Herramientas::FloatVEtoFloat($value);
                else
                    $valorfloat = 0.00;
            }
        }
        return round($valorfloat, 2);
    }

    public static function FormatoMonto($value, $dec='2') {
        $for = 'VE';
        if ($value == ' ') {
            $value = 0;
        }

        if ($for == 'VE')
            $valor = number_format($value, $dec, ',', '.');
        elseif ($for == 'IN')
            $valor = number_format($value, $dec, '.', ',');
        else
            $valor = number_format($value, 0);

        return $valor;
    }

    public static function ObtenerMesenLetras($mes) {
        if ($mes == '01')
            return $mes = 'Enero';
        if ($mes == '02')
            return $mes = 'Febrero';
        if ($mes == '03')
            return $mes = 'Marzo';
        if ($mes == '04')
            return $mes = 'Abril';
        if ($mes == '05')
            return $mes = 'Mayo';
        if ($mes == '06')
            return $mes = 'Junio';
        if ($mes == '07')
            return $mes = 'Julio';
        if ($mes == '08')
            return $mes = 'Agosto';
        if ($mes == '09')
            return $mes = 'Septiembre';
        if ($mes == '10')
            return $mes = 'Octubre';
        if ($mes == '11')
            return $mes = 'Noviembre';
        if ($mes == '12')
            return $mes = 'Diciembre';
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////FUNCION FECHA ESCRITA//////////////////////////////////////
    ////////////////////////////////////FORMATO DD/MM/YYYY O DD-MM-YYYY//////////////////////////////////
    public static function obtenerfechaescrita($fecha, $todo=false) {
        $retorna = "";
        $fechaaux = eregi_replace("/", "-", $fecha);
        $fechaaux = explode("-", $fechaaux);
        if (!$todo)
            $retorna.=$fechaaux[0];
        else
            $retorna.=strtoupper(obtenermontoescrito($fechaaux[0], false));
        $retorna.=" DE " . strtoupper(self::ObtenerMesenLetras($fechaaux[1])) . " DEL AÑO ";
        if (!$todo)
            $retorna.=$fechaaux[2];
        else
            $retorna.=strtoupper(obtenermontoescrito($fechaaux[2], false));
        return $retorna;
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////FUNCION MONTO ESCRITO//////////////////////////////////////
    public static function obtenermontoescrito($numero, $fuerte=true) {
        $poscoma = 0;
        $nombre = '';
        $contmil = 0;
        $nrochar = 1;
        $tira = "";
        $primero = "";
        $segundo = "";
        $tercero = "";
        $cuarto = "";
        $quinto = "";
        $sexto = "";
        $sepmil1 = "";
        $sepmil2 = "";
        $sepmil3 = "";
        $sepmil4 = "";
        $sepmil5 = "";
        $sepmil6 = "";
        $tira3 = "";
        $melones = " MILLONES ";
        $billones = " BILLONES ";
        //Formatear el N�mero en Estudio
        $monchar = number_format($numero, 2, ".", ",") . "";
        $monchar = trim($monchar);
        $pospunto = strpos($monchar, '.'); //Posici�n del Punto Decimal
        $indchar = $pospunto;             //Comienzo del recorrido de lectura
        //Se determina directamente
        //la parte decimal del n�mero
        $decimal = " CON " . substr($monchar, $pospunto + 1) . "/100";
        $array = array();
        $array = H::registrosCSV("NUMEROS.CSV"); //registro numeros
        while ($indchar >= 0) {        //Comienza el ciclo m�s externo
            $contmil = $contmil + 1;
            $indchar = $indchar - 1;
            $contchar = 1;
            $tira3 = "";
            $num1 = "";
            $num2 = "";
            $num3 = "";
            $nro = substr($monchar, $indchar, 1);
            while (($indchar >= 0) && ($contchar <= 3)) {
                //buscar en el arreglo de numeros claves unidad, decena y centena! atras de la clave parr
                $arrsql = H::getXYbuscar_arreglo($array , 'nomnum', $nro.','.$contchar);
                if (count($arrsql) > 0) {
                    $nombre = $arrsql[0];
                } else {
                    $nombre = "";
                }

                if ($contchar == 1) {
                    $numant = $nro + 0;
                    $num1 = $nombre;
                }//if ($contchar=1)
                elseif ($contchar == 2) {
                    $num2 = $nombre;
                    $nro = $nro + 0;
                    if ($nro == 1) {
                        $nro = $nro + "";
                        if ($numant == 1) {
                            $num1 = "";
                            $num2 = "ONCE";
                        }//if ($numant=1)
                        elseif ($numant == 2) {
                            $num1 = "";
                            $num2 = "DOCE";
                        }//elseif ($numant=2)
                        elseif ($numant == 3) {
                            $num1 = "";
                            $num2 = "TRECE";
                        }//elseif ($numant=3)
                        elseif ($numant == 4) {
                            $num1 = "";
                            $num2 = "CATORCE";
                        }//elseif ($numant=4)
                        elseif ($numant == 5) {
                            $num1 = "";
                            $num2 = "QUINCE";
                        }//elseif ($numant=5)
                    }//if($nro=1)
                }//elseif ($contchar=2)
                elseif ($contchar == 3) {
                    $num3 = $nombre;
                }//elseif ($contchar=3)
                $indchar = $indchar - 1;
                $contchar = $contchar + 1;
                $nro = substr($monchar, $indchar, $nrochar);
                if (trim($nro) == ",") {
                    $nro = "-1";
                } //if ($nro=",")
            }//while(($indchar>=0)&&($contchar<=3))
            if (trim($num2) <> "") {
                if ($numant <> 0) {
                    $operador = " Y ";
                }//if ($numant<>0)
                else {
                    $operador = "";
                }//else
            }//if ($num2<>"")
            else {
                $operador = "";
            }//else

            if (trim($num2) == "ONCE" || trim($num2) == "DOCE" || trim($num2) == "TRECE" || trim($num2) == "CATORCE" || trim($num2) == "QUINCE") {
                $operador = "";
            }//if ($num2="ONCE" || $num2="DOCE" || $num2="TRECE" || $num2="CATORCE" || $num2="QUINCE")

            if (trim($num1) == "CERO") {
                if (trim($num2) <> "" || trim($num3) <> "") {
                    $num1 = "";
                    $operador = "";
                }//if ($num2<>"" || $num3<>"")
            }//if ($num1="CERO")

            if (trim($num3) == "CIENTO") {
                if (trim($num2) == "" && trim($num1) == "") {
                    $num3 = "CIEN";
                    $num2 = "";
                    $operador = "";
                    $num1 = "";
                }//if ($num2="" && $num1="")
            }//if ($num3="CIENTO")

            if (trim($num1) == "UNO") {
                if ($contmil > 1) {
                    $num1 = "UN";
                }//if ($contmil>1)
            }//if ($num1="UNO")

            $tira3 = $num3 . " " . $num2 . $operador . $num1;
            if ($contmil == 1) {
                $primero = $tira3;
            }//if ($contmil=1)
            elseif ($contmil == 2) {
                $segundo = $tira3;
                if (trim($segundo) == "CERO") {
                    $segundo = "";
                    if (trim($primero) == "CERO") {
                        $primero = "";
                    }//if ($primero="CERO")
                }//if ($segundo="CERO")
                else {
                    $sepmil2 = " MIL ";
                    if (trim($primero) == "CERO") {
                        $primero = "";
                    }//if ($primero="CERO")
                }//else
            }//elseif ($contmil=2)
            elseif ($contmil == 3) {
                $tercero = $tira3;
                if (trim($num1) == "UN") {
                    $sepmil3 = " MILLON ";
                }//if ($num1="UN")
                else {
                    $sepmil3 = " MILLONES ";
                }//else
                if (trim($tercero) == "CERO") {
                    $tercero = "";
                }//if ($tercero="CERO")
            }//elseif ($contmil=3)
            elseif ($contmil == 4) {
                $cuarto = $tira3;
                if (trim($cuarto) <> "CERO") {
                    if (trim($sepmil3) == "MILLON") {
                        $sepmil3 = " MILLONES ";
                    }//if ($sepmil3="MILLON")
                    $sepmil4 = " MIL ";
                }//if ($cuarto<>"CERO")
                else {
                    $cuarto = "";
                }//else
            }//elseif ($contmil=4)
            elseif ($contmil == 5) {
                $quinto = $tira3;
                if (trim($num1) == "UN") {
                    $sepmil5 = " BILLON ";
                }//if ($num1="UN")
                else {
                    $sepmil5 = " BILLONES ";
                }//else

                if (trim($tercero) == "" && trim($cuarto) == "") {
                    $sepmil3 = "";
                }//if ($tercero="" && $cuarto="")


                if (trim($quinto) <> "CERO") {
                    if (trim($cuarto) == "CERO") {
                        $cuarto = "";
                        $sepmil4 = "";
                    }//if ($cuarto="CERO")
                }//if ($quinto<>"CERO")
            }//elseif ($contmil=5)
            elseif ($contmil == 6) {
                $sexto = $tira3;
                if (trim($sexto) <> "CERO") {
                    $sepmil6 = " MIL ";
                    if (trim($sepmil5) == "BILLON") {
                        $sepmil5 = " BILLONES ";
                    }//if ($sepmil5="BILLON")
                    if (trim($quinto) == "CERO") {
                        $quinto = "";
                    }//if ($quinto="CERO")
                }//if ($sexto<>"CERO")
            }//elseif ($contmil=6)
        } // while($indchar>=0)
        if ($fuerte)
            return $sexto . $sepmil6 . $quinto . $sepmil5 . $cuarto . $sepmil4 . $tercero . $sepmil3 . $segundo . $sepmil2 . $primero . $sepmil1 . "BOLIVARES" . $decimal;
        else
            return $sexto . $sepmil6 . $quinto . $sepmil5 . $cuarto . $sepmil4 . $tercero . $sepmil3 . $segundo . $sepmil2 . $primero . $sepmil1;
    }

//function montoescrito($numero)
    /////////////////////////////////////////////////////////////////////////////////////////////////////

    public static function porcentaje($cantidad, $porciento, $decimales) {
        return H::FormatoMonto($cantidad * $porciento / 100, $decimales);
    }

    public static function getPorcentaje($cantidad_p, $cantidad_g, $decimales) {
        return number_format($cantidad_p * 100 / $cantidad_g, $decimales) . '%';
    }

    

    function periodo($periodo, $inifin) {
        if ($inifin == 1)
            return "01/" . $periodo . "/" . $this->perfis;
        else {
            if ($periodo == "01" || $periodo == "03" || $periodo == "05" || $periodo == "07" || $periodo == "08" || $periodo == "10" || $periodo == "12")
                return "31/" . $periodo . "/" . $this->perfis;
            elseif ($periodo == "04" || $periodo == "06" || $periodo == "09" || $periodo == "11")
                return "30/" . $periodo . "/" . $this->perfis;
            else
                return "29/" . $periodo . "/" . $this->perfis;
        }
    }

    public function FormatoNum($varmonto, $format='VE') {
        if ($format == 'VE') {
            $auxvar = str_replace(".", "", $varmonto);
            $auxvar = str_replace(",", ".", $auxvar);
        } else {
            $auxvar = str_replace(",", "", $varmonto);
            $auxvar = str_replace(".", ",", $auxvar);
        }

        return $auxvar;
    }

    public static function periodo2($periodo, $ano) {

        if ($periodo == "01" || $periodo == "03" || $periodo == "05" || $periodo == "07" || $periodo == "08" || $periodo == "10" || $periodo == "12")
            return $ano . "-" . $periodo . "-" . "31";
        elseif ($periodo == "04" || $periodo == "06" || $periodo == "09" || $periodo == "11")
            return $ano . "-" . $periodo . "-" . "30";
        else
            return $ano . "-" . $periodo . "-" . "29";
    }

    public static function array_lineal($arr, $padre='') {
        $arrlin = array();
        foreach ($arr as $k => $v) {
            if (is_array($v)) {
                if ($padre != '')
                    $p = $padre . ' => ' . $k; else
                    $p = $k;
                $arrlin = array_merge($arrlin, self::array_lineal($v, $p));
            }else {
                $arrlin[$v] = $padre . ' => ' . $k;
            }
        }
        return $arrlin;
    }
    public static function formatearFechaPsql($fecha){
    if (ereg("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})",$fecha, $registros)) {
		return "$registros[1]-$registros[2]-$registros[3]";
	}else if(ereg ("([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})",$fecha, $registros)) {
		return "$registros[3]-$registros[2]-$registros[1]";
	}else if (ereg ("([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})",$fecha, $registros)) {
		return "$registros[1]-$registros[2]-$registros[3]";
	}else if(ereg ("([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})",$fecha, $registros)) {
		return "$registros[3]-$registros[2]-$registros[1]";
	}else {
	  return "0000-00-00";
	}
    }
     public static function FormatoFecha($fecraya)
      {
      if (ereg("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})",$fecraya, $registros)){
       $fecha=split('-',$fecraya);
       $fecbarra=$fecha[2]."/".$fecha[1]."/".$fecha[0];
      }else{
          $fecbarra=$fecraya;
      }
       
       return $fecbarra;
      }

}


class H extends Herramientas {
    
}

?>
